package com.newstore.view;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.newstore.R;
import com.newstore.classes.Barcode;
import com.newstore.classes.Product;
import com.newstore.database.ProductDatabase;

/**
 * InfoProduct est l'activité qui se lance après la lecture du code-barres d'un produit
 * Elle renseignent sur la dénomination, la référence, l'emplacement et la catégorie du produit
 * 
 * @author gprudhom
 * @version 1.0
 */
public class InfoProduct extends Activity
{
	TextView tvNom;
	TextView tvRef;
	TextView tvCategory;
	TextView tvLocation;

	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.infoproduct);

		tvNom = (TextView) findViewById(R.id.tvnom);
		tvRef = (TextView) findViewById(R.id.tvref);
		tvCategory = (TextView) findViewById(R.id.tvcategory);
		tvLocation = (TextView) findViewById(R.id.tvlocation);
		Button btScan = (Button) findViewById(R.id.btscan);

		btScan.setOnClickListener(new View.OnClickListener()
		{
			public void onClick(View v)
			{
				readEANCode();
			}
		});
	}

	/**
	 * Méthode qui est appelé lors de la lecture du code-barres. Elle permet de
	 * vérifier que le code-barres scanné correspond bien à un des produits.
	 */
	public void onActivityResult(int requestCode, int resultCode, Intent intent)
	{
		IntentResult scanResult = IntentIntegrator.parseActivityResult(
				requestCode, resultCode, intent);
		boolean successScan = false;
		if (scanResult != null)
		{
			Log.i("result", scanResult.getContents());
			Barcode barcode = new Barcode(scanResult.getContents());
			Log.i("barcode1",""+barcode.getPrefixElement());
			Log.i("barcode2",""+barcode.getSecondElement());
			Log.i("barcode3",""+barcode.getThirdElement());
			Log.i("barcode4",""+barcode.getFourthElement());
			//try
			//{
				SQLiteDatabase database = Authentication.accessDB.open(true);
				ProductDatabase productDb = new ProductDatabase(database);
				Product product = productDb.getProductFromBarcode(barcode); // récupération du produit
				Log.i("product",""+product.getName());
				Authentication.accessDB.close();
				displayInfoProduct(product);
				successScan = true;
			//} 
		//	catch (Exception e){
		//		e.printStackTrace();
		//	}
		}
		if (!successScan)
			this.alertDialogForScan(
					"Scan échoué",
					"Le code-barres ne correspond à aucun produit.",
					true);
	}

	/**
	 * Affiche les informations d'une commande
	 */
	public void displayInfoProduct(Product pProduct)
	{
		tvNom.setText(pProduct.getName());
		tvRef.setText(pProduct.getReference());
		tvCategory.setText(pProduct.getCategory());
		tvLocation.setText(pProduct.getLocation());
	}

	/**
	 * Alert Dialog qui permet de lancer le lecteur de code-barres
	 * 
	 * @param title
	 *            Titre de la fenêtre
	 * @param message
	 *            Message dans la fenêtre
	 */
	public void alertDialogForScan(String title, String message, boolean stockOk)
	{
		AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
		alertDialog.setTitle(title);
		alertDialog.setMessage(message);
		alertDialog.setPositiveButton("Ok",
				new DialogInterface.OnClickListener()
				{
					public void onClick(DialogInterface dialog, int which)
					{
						readEANCode();
					}
				});
		alertDialog.show();
	}

	/**
	 * Permet de lancer le lecteur de code-barres
	 */
	public void readEANCode()
	{
		IntentIntegrator integrator = new IntentIntegrator(this);
		integrator.initiateScan();
	}
}
